﻿//using System;
//using System.Data;
//using System.Configuration;
//using System.Collections;
//using System.Web;
//using System.Web.Security;
//using System.Web.UI;
//using System.Web.UI.WebControls;
//using System.Web.UI.WebControls.WebParts;
//using System.Web.UI.HtmlControls;
//using System.Collections.Specialized;
//using System.Collections.Generic;
//using eBlog.Common.AlipayClass;
//using eBlog.Common;
//using eBlog.Common.Files;
//using eBlog.Core;
///// <summary>
///// 功能：支付宝主动通知调用的页面（服务器异步通知页面）
///// 版本：3.1
///// 日期：2010-10-29
///// 说明：
///// 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
///// 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
///// 
///// ///////////////////页面功能说明///////////////////
///// 创建该页面文件时，请留心该页面文件中无任何HTML代码及空格。
///// 该页面不能在本机电脑测试，请到服务器上做测试。请确保外部可以访问该页面。
///// 该页面调试工具请使用写文本函数log_result，该函数已被默认开启
///// TRADE_FINISHED(表示交易已经成功结束，通用即时到帐反馈的交易状态成功标志);
///// TRADE_SUCCESS(表示交易已经成功结束，高级即时到帐反馈的交易状态成功标志);
///// 该通知页面主要功能是：对于返回页面（return_url.aspx）做补单处理。如果没有收到该页面返回的 success 信息，支付宝会在24小时内按一定的时间策略重发通知
///// </summary>
//public partial class notify_url : PageBase
//{
//    protected void Page_Load(object sender, EventArgs e)
//    {
//        SortedDictionary<string, string> sArrary = GetRequestPost();
//        ///////////////////////以下参数是需要设置的相关配置参数，设置后不会更改的//////////////////////
//        AlipayConfig con = new AlipayConfig();
//        string partner = con.Partner;
//        string key = con.Key;
//        string input_charset = con.Input_charset;
//        string sign_type = con.Sign_type;
//        string transport = con.Transport;
//        //////////////////////////////////////////////////////////////////////////////////////////////

//        if (sArrary.Count > 0)//判断是否有带返回参数
//        {
//            AlipayNotify aliNotify = new AlipayNotify(sArrary, Request.Form["notify_id"], partner, key, input_charset, sign_type, transport);
//            string responseTxt = aliNotify.ResponseTxt; //获取远程服务器ATN结果，验证是否是支付宝服务器发来的请求
//            string sign = Request.Form["sign"];         //获取支付宝反馈回来的sign结果
//            string mysign = aliNotify.Mysign;           //获取通知返回后计算后（验证）的签名结果

//            //写日志记录（若要调试，请取消下面两行注释）
//            string sWord = "responseTxt=" + responseTxt + "\n notify_url_log:sign=" + Request.Form["sign"] + "&mysign=" + mysign + "\n notify回来的参数：" + aliNotify.PreSignStr;
//            AlipayFunction.log_result(Server.MapPath("/log/" + DateTime.Now.ToString().Replace(":", "")) + ".txt", sWord);

//            //判断responsetTxt是否为ture，生成的签名结果mysign与获得的签名结果sign是否一致
//            //responsetTxt的结果不是true，与服务器设置问题、合作身份者ID、notify_id一分钟失效有关
//            //mysign与sign不等，与安全校验码、请求时的参数格式（如：带自定义参数等）、编码格式有关
//            if (responseTxt == "true" && sign == mysign)//验证成功
//            {
//                /////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                //请在这里加上商户的业务逻辑程序代码

//                //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
//                //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
//                string trade_no = Request.Form["trade_no"];         //支付宝交易号
//                string order_no = Request.Form["out_trade_no"];     //获取订单号
//                string total_fee = Request.Form["total_fee"];       //获取总金额
//                string subject = Request.Form["subject"];           //商品名称、订单名称
//                string body = Request.Form["body"];                 //商品描述、订单备注、描述
//                string buyer_email = Request.Form["buyer_email"];   //买家支付宝账号
//                string trade_status = Request.Form["trade_status"]; //交易状态
//                string gmt_payment = Request.Form["gmt_payment"];

//                if (Request.Form["trade_status"] == "TRADE_FINISHED" || Request.Form["trade_status"] == "TRADE_SUCCESS")
//                {
//                    //判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
//                    //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
//                    //如果有做过处理，不执行商户的业务程序
//                    string tradeType = "";
//                    int uID = 0;
//                    int orderID = 0;
//                    int buyQuantity = 0;
//                    //检查必要的返回数据

//                    DateTime? payTime = null;

//                    if (String.IsNullOrEmpty(gmt_payment))
//                    { payTime = DateTime.Now; }
//                    else
//                    { payTime = DateTime.Parse(gmt_payment); }


//                    decimal TradeMoney = 0;
//                    try
//                    {
//                        TradeMoney = decimal.Parse(total_fee);   //检查返回金额
//                    }
//                    catch
//                    {
//                        //返回的金额不正确.
//                        return;

//                    }
//                    string Weburl = XmlHelper.Read(ConfigPath + "/system.config", "Site/WebUrl", "");

//                    if (!String.IsNullOrEmpty(order_no) && order_no.IndexOf("-") > 0 && !String.IsNullOrEmpty(trade_no) && !String.IsNullOrEmpty(total_fee))
//                    {
//                        tradeType = order_no.Split('-')[0].ToString();

//                        if (tradeType == "charge") //================================充值
//                        {
//                            if (PageValidate.IsNumber(order_no.Split('-')[1].ToString()))
//                            {
//                                uID = int.Parse(order_no.Split('-')[1].ToString());

//                                if (Buying.User_Pay_Charge("alipay", order_no, trade_no, uID, TradeMoney, payTime, 0)) //自动执行充值
//                                {
//                                    Response.Write("success");
//                                    return;
//                                }
//                            }
//                            else
//                            {
//                                //返回的交易号中不包含用户ID
//                                Response.Write("返回的交易号中不包含用户ID");
//                                return;
//                            }

//                        }
//                        else if (tradeType == "go") //===================订单购买
//                        {
//                            if (PageValidate.IsNumber(order_no.Split('-')[1].ToString()) )
//                            {
//                                orderID = int.Parse(order_no.Split('-')[1].ToString());
//                               // buyQuantity = int.Parse(order_no.Split('-')[2].ToString());

//                                if (Buying.User_Pay_GoBuy("alipay", order_no, trade_no, orderID, TradeMoney, 0, payTime, 0))
//                                {
//                                    Response.Write("success");
//                                    return;
//                                }
//                            }
//                            else
//                            {
//                                //返回的交易号中不包含订单ID或数量
//                                Response.Write("返回的交易号中不包含订单ID或数量");
//                                return;
//                            }

//                        }
//                        else
//                        {
//                            //返回的交易号中不包含系统特定的充值或购买标识
//                            Response.Write("返回的交易号中不包含系统特定的充值或购买标识");
//                            return;

//                        }

//                    }

//                   // Response.Write("fail");  //请不要修改或删除
//                }
//                else
//                {
//                    Response.Write("success");  //其他状态判断。普通即时到帐中，其他状态不用判断，直接打印success。
//                }
//                //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——

//                /////////////////////////////////////////////////////////////////////////////////////////////////////////////
//            }
//            else//验证失败
//            {
//                Response.Write("fail");
//            }
//        }
//        else
//        {
//            Response.Write("无通知参数");
//        }
//    }

//    /// <summary>
//    /// 获取支付宝POST过来通知消息，并以“参数名=参数值”的形式组成数组
//    /// </summary>
//    /// <returns>request回来的信息组成的数组</returns>
//    public SortedDictionary<string, string> GetRequestPost()
//    {
//        int i = 0;
//        SortedDictionary<string, string> sArray = new SortedDictionary<string, string>();
//        NameValueCollection coll;
//        //Load Form variables into NameValueCollection variable.
//        coll = Request.Form;

//        // Get names of all forms into a string array.
//        String[] requestItem = coll.AllKeys;

//        for (i = 0; i < requestItem.Length; i++)
//        {
//            sArray.Add(requestItem[i], Request.Form[requestItem[i]]);
//        }

//        return sArray;
//    }
//}
